package demo.spring.framework.beans.factory.annotation;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.alibaba.fastjson.JSONObject;

import demo.spring.framework.beans.factory.annotation.bean.Config;
import demo.spring.framework.beans.factory.annotation.cfg.AppConfig;

public class AnnotationDemo {

    private static Logger logger = LoggerFactory.getLogger(AnnotationDemo.class);

    @Test
    public void testValue() {
        /**
         * 使用 classpath: 前缀，Spring 只加载第一份符合条件的 XML 文件。 当使用classpath:前缀时，系统通过类加载路径搜索
         * bean.xml文件，如果找到文件名匹配的文件，系统立即停止搜索，装载该文件，即使有多份文件名匹配的文件，系统只装载第一份文件。 资源文件的搜索顺序则取决于类加载路径的顺序，排在前面的配置文件将优先被加载。
         */
        ApplicationContext context = new FileSystemXmlApplicationContext(
                "classpath:demo/spring/framework/annotation/resources/spring-cfg.xml");

        context.getBean("propertyConfigurer");

        Config cfg = context.getBean(Config.class);

        String json = JSONObject.toJSONString(cfg);
        logger.info(json);

    }

    @Test
    public void testValue2() {
        /**
         * 使用 classpath: 前缀，Spring 只加载第一份符合条件的 XML 文件。 当使用classpath:前缀时，系统通过类加载路径搜索
         * bean.xml文件，如果找到文件名匹配的文件，系统立即停止搜索，装载该文件，即使有多份文件名匹配的文件，系统只装载第一份文件。 资源文件的搜索顺序则取决于类加载路径的顺序，排在前面的配置文件将优先被加载。
         */
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        AppConfig cfg = context.getBean(AppConfig.class);
        String json = JSONObject.toJSONString(cfg);
        logger.info(json);
    }
}
